#include "getline.h"

// 获取一行\r\n结尾的数据
int get_line(int cfd, char *buf, int size){
    int i = 0;
    char c = '\0';
    int n;

    while( (i< size - 1) && (c != '\n')){
        n = recv(cfd, &c, 1, 0);
        if(n > 0){
            if(c == '\r'){
                // MSG_PEEK表示拷贝读取一次，读取之后管道里面的数据没有删除还在里面
                n = recv(cfd, &c, 1, MSG_PEEK);
                if( (n > 0) && (c == '\n')){
                    recv(cfd, &c, 1, 0);
                }else{
                    c = '\n';
                }
            }
            buf[i] = c;
            i++;
        }else{
            // if(n == -1 && errno == EAGAIN){
            //     continue;
            // }else if(n == -1 && errno == EINTR){
            //     continue;
            // }else
                c = '\n';
        }
    }

    buf[i] = '\0';

    if( n == -1 ){
        i = n;
    }

    return i;
}